#ifndef RANGEPARTITIONMATCHER_H
#define RANGEPARTITIONMATCHER_H
#include <vector>
// #include <optional>
#include <string>
#include <unordered_map>
#include "RangePartition.h"

template<typename T>
class RangePartitionMatcher {
public:
    virtual ~RangePartitionMatcher() = default;

    // 接口1：根据传入的RangePartition集合，初始化RangePartitionMatcher
    virtual void initial(std::vector<RangePartition<T> > partitions) = 0;

    // 接口2：获取当前RangePartitionMatcher需要匹配的分区集合（该接口用于检查分区定义是否保存）
    // 返回：所有已保存的分区定义
    virtual std::vector<RangePartition<T> > getPartitions() const = 0;

    // 接口3：点查，查找给定值匹配的分区
    // 返回：单个分区名称
    // virtual std::optional<std::string> findPartitionByValue(const T &value) const = 0;
    virtual std::string findPartitionByValue(const T &value) const = 0;

    // 接口4：范围查询，查找给定区间范围匹配的分区
    // 返回：所有匹配到的分区名称
    virtual std::vector<std::string> findPartitionByRange(const T &rangeStart, const T &rangeEnd) const = 0;

    //二分查找
    virtual const std::string& BinSearch(const T& values) const = 0;

public:
    //所有分区的结果
    std::vector<RangePartition<T> > trueParitions;
    // std::unordered_map<T,std::string> quickSortRange;
};

#endif //RANGEPARTITIONMATCHER_H
